Security News
ESLint is Now Language-Agnostic: Linting JSON, Markdown, and Beyond
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
gulp-filter
Advanced tools
The gulp-filter package is a plugin for Gulp, a streaming build system. It allows you to filter files in a vinyl stream based on a given criteria, enabling you to include or exclude files from further processing in your Gulp tasks.
Filtering files by glob patterns
This feature allows you to filter files in a stream using glob patterns. In this example, only JavaScript files are passed through the filter and then written to the 'dist/js' directory.
const gulp = require('gulp');
const filter = require('gulp-filter');
const jsFilter = filter('**/*.js', { restore: true });
gulp.task('scripts', function() {
return gulp.src('src/**/*')
.pipe(jsFilter)
.pipe(gulp.dest('dist/js'))
.pipe(jsFilter.restore);
});
Restoring filtered files
This feature allows you to restore the filtered files back into the stream after processing. In this example, after processing JavaScript files, the rest of the files are written to the 'dist/others' directory.
const gulp = require('gulp');
const filter = require('gulp-filter');
const jsFilter = filter('**/*.js', { restore: true });
gulp.task('scripts', function() {
return gulp.src('src/**/*')
.pipe(jsFilter)
.pipe(gulp.dest('dist/js'))
.pipe(jsFilter.restore)
.pipe(gulp.dest('dist/others'));
});
Filtering files by custom function
This feature allows you to filter files using a custom function. In this example, only JavaScript files containing the string 'use strict' are passed through the filter and then written to the 'dist/strict' directory.
const gulp = require('gulp');
const filter = require('gulp-filter');
const customFilter = filter(function(file) {
return file.contents.toString().indexOf('use strict') !== -1;
});
gulp.task('strict', function() {
return gulp.src('src/**/*.js')
.pipe(customFilter)
.pipe(gulp.dest('dist/strict'));
});
The gulp-if package allows you to conditionally run a Gulp plugin based on a condition. It is similar to gulp-filter in that it can be used to include or exclude files from further processing, but it does so based on a condition rather than a filter.
The gulp-match package is used to match files in a Gulp stream based on a condition. It is similar to gulp-filter in that it can be used to include or exclude files from further processing, but it is more lightweight and only provides matching functionality.
The gulp-ignore package allows you to ignore files in a Gulp stream based on a condition. It is similar to gulp-filter in that it can be used to exclude files from further processing, but it does not provide the ability to restore filtered files back into the stream.
Filter files in a Vinyl stream
Enables you to work on a subset of the original files by filtering them using glob patterns. When you're done and want all the original files back you just use the restore
stream.
$ npm install --save-dev gulp-filter
You may want to just filter the stream content:
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const filter = require('gulp-filter');
gulp.task('default', () => {
// Create filter instance inside task function
const f = filter(['**', '!*src/vendor']);
return gulp.src('src/**/*.js')
// Filter a subset of the files
.pipe(f)
// Run them through a plugin
.pipe(uglify())
.pipe(gulp.dest('dist'));
});
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const filter = require('gulp-filter');
gulp.task('default', () => {
// Create filter instance inside task function
const f = filter(['**', '!*src/vendor'], {restore: true});
return gulp.src('src/**/*.js')
// Filter a subset of the files
.pipe(f)
// Run them through a plugin
.pipe(uglify())
// Bring back the previously filtered out files (optional)
.pipe(f.restore)
.pipe(gulp.dest('dist'));
});
By combining and restoring different filters you can process different sets of files with a single pipeline.
const gulp = require('gulp');
const less = require('gulp-less');
const concat = require('gulp-concat');
const filter = require('gulp-filter');
gulp.task('default', () => {
const jsFilter = filter('**/*.js', {restore: true});
const lessFilter = filter('**/*.less', {restore: true});
return gulp.src('assets/**')
.pipe(jsFilter)
.pipe(concat('bundle.js'))
.pipe(jsFilter.restore)
.pipe(lessFilter)
.pipe(less())
.pipe(lessFilter.restore)
.pipe(gulp.dest('out/'));
});
You can restore filtered files in a different place and use it as a standalone source of files (ReadableStream). Setting the passthrough
option to false
allows you to do so.
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const filter = require('gulp-filter');
gulp.task('default', () => {
const f = filter(['**', '!*src/vendor'], {restore: true, passthrough: false});
const stream = gulp.src('src/**/*.js')
// Filter a subset of the files
.pipe(f)
// Run them through a plugin
.pipe(uglify())
.pipe(gulp.dest('dist'));
// Use filtered files as a gulp file source
f.restore.pipe(gulp.dest('vendor-dist'));
return stream;
});
Returns a transform stream with a .restore property.
Type: string
Array
Function
Accepts a string/array with globbing patterns which are run through multimatch.
If you supply a function, you'll get a vinyl file object as the first argument and you're expected to return a boolean of whether to include the file:
filter(file => /unicorns/.test(file.path));
Type: Object
Accepts minimatch options.
Note: Set dot: true
if you need to match files prefixed with a dot (e.g. .gitignore
).
Type: boolean
Default: false
Restore filtered files.
Type: boolean
Default: true
When set to true
, filtered files are restored with a stream.PassThrough
, otherwise, when set to false
, filtered files are restored as a stram.Readable
.
When the stream is a stream.Readable
, it ends by itself, but when it's stream.PassThrough
, you are responsible of ending the stream.
MIT © Sindre Sorhus
FAQs
Filter files in a `vinyl` stream
The npm package gulp-filter receives a total of 134,467 weekly downloads. As such, gulp-filter popularity was classified as popular.
We found that gulp-filter demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
ESLint has added JSON and Markdown linting support with new officially-supported plugins, expanding its versatility beyond JavaScript.
Security News
Members Hub is conducting large-scale campaigns to artificially boost Discord server metrics, undermining community trust and platform integrity.
Security News
NIST has failed to meet its self-imposed deadline of clearing the NVD's backlog by the end of the fiscal year. Meanwhile, CVE's awaiting analysis have increased by 33% since June.